#include <myhead.h>
int main(int argc, const char *argv[])
{
	//搭建服务器端
	//1、创建套接字
	int S;
	if((S=socket(AF_INET,SOCK_STREAM,0))==-1){perror("创建套接字失败");return -1;}
	//2、绑定本机IP及端口
	struct sockaddr_in addr={0};
	addr.sin_family=AF_INET;
	addr.sin_port=htons(12345);
	addr.sin_addr.s_addr=inet_addr("192.168.3.12");
	//addr.sin_addr.s_addr=inet_addr("192.168.65.128");
	if(bind(S,(struct sockaddr*)&addr,sizeof(addr))==-1){perror("绑定失败");return -1;}
	//1、创建套接字
	int CCC;
	if((CCC=socket(AF_INET,SOCK_STREAM,0))==-1){perror("创建套接字失败");return -1;}
	//2、绑定本机IP及端口
	struct sockaddr_in addrr={0};
	addrr.sin_family=AF_INET;
	addrr.sin_port=htons(12345);
	addrr.sin_addr.s_addr=inet_addr("192.168.3.13");
	//addr.sin_addr.s_addr=inet_addr("192.168.65.128");
	if(bind(CCC,(struct sockaddr*)&addrr,sizeof(addrr))==-1){perror("绑定失败iiiii");return -1;}
	//3、监听
	listen(S,10);
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//创建动态扩容文件epoll
	int epoll=epoll_create(EPOLL_CLOEXEC);
	//将服务器描述符和标准输入描述符添加进扩容文件
	struct epoll_event text={0};
	////服务器
	text.data.fd=S;text.events=EPOLLIN;
	epoll_ctl(epoll,EPOLL_CTL_ADD,S,&text);
	////标准输入
	text.data.fd=0;text.events=EPOLLIN;
	epoll_ctl(epoll,EPOLL_CTL_ADD,0,&text);
	////固定客户端
	text.data.fd=CCC;text.events=EPOLLIN;
	epoll_ctl(epoll,EPOLL_CTL_ADD,CCC,&text);
	//阻塞监听
	printf("阻塞监听\n");
	////返回的描述符结构体
	struct epoll_event epollbuf[50]={0};
	while(1)
	{
		int len=epoll_wait(epoll,epollbuf,50,-1);
		for(int i=0;i<len;i++)
		{
			char buf[128]={0};
			if(epollbuf[i].data.fd==S)//服务器描述符变化
			{
				/*
				//响应客户端连接
				int CC=accept(S,NULL,NULL);
				//将客户端描述符加入监听文件
				text.data.fd=CC;
				text.events=EPOLLIN;
				epoll_ctl(epoll,EPOLL_CTL_ADD,CC,&text);
				printf("客户端<%d>建立连接\n",CC);
				*/
				printf("服务器描述符变化\n");
			}
			else if(epollbuf[i].data.fd==0)//标准输入流描述符变化
			{
				scanf("%127s",buf);
				while(getchar()!=10);
				printf("标准输入流输入:%s\n",buf);
			}
			else//客户端描述符变化
			{
				int ret=read(epollbuf[i].data.fd,buf,128);
				if(ret==0)
				{
					epoll_ctl(epoll,EPOLL_CTL_DEL,epollbuf[i].data.fd,NULL);
					close(epollbuf[i].data.fd);
					printf("客户端<%d>断开连接\n",epollbuf[i].data.fd);
					continue;
				}
				printf("客户端<%d>发来消息%s\n",epollbuf[i].data.fd,buf);
			}
		}

	}
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	close(S);
	return 0;
}
